from dbutils.pooled_db import PooledDB
import pymysql
from pymysql import cursors

''''连接数据库数据池操作'''
pool = PooledDB(
    creator=pymysql,
    maxconnections=6,  # 连接池允许的最大连接数，0和r表示不限制连接数
    mincached=2,  # 初始化时，连接池中至少创建的空闲连接，0表示不创建
    maxcached=5,  # 连接池中最多空闲连接数，0和r表示不限制
    maxshared=3,  # 连接池中最多共享连接数，0和r表示全部共享
    blocking=True,  # 连接池中如果没有可用连接后，是否阻塞等待，True，等待；False，不等待然后报错
    maxusage=None,  # 一个连接最多被重复使用的次数，None表示无限制
    setsession=[],  # 开始会话前执行的命令列表          
    ping=0,  # ping Mysql服务端，检查是否服务可用
    host='localhost',
    port=3306,
    user='root',
    password='root',
    database='xu_projection_test',
    charset='utf8mb4'
)
def insert(sql, params):
    connection = pool.connection()  # 以后每次需要数据库连接就是用connection（）函数获取连接就好了
    with connection.cursor(cursor=cursors.DictCursor) as cursor:
        cursor.execute(sql, params)
        connection.commit() # 提交事务

def fetch_all(sql, params):
    connection = pool.connection()  # 以后每次需要数据库连接就是用connection（）函数获取连接就好了
    with connection.cursor(cursor=cursors.DictCursor) as cursor:
        cursor.execute(sql, params)
        result = cursor.fetchall()
        
    return result

def fetch_one(sql, params):
    connection = pool.connection()
    with connection.cursor(cursor=cursors.DictCursor) as cursor:
        cursor.execute(sql, params)
        result = cursor.fetchone()
        
    return result